iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0

Cash 實在不想再看到Fields為新學Linux 相關技能,擺出那張可憐兮兮的臉,決定消化好 Docker 的知識後,給一個最濃縮的使用說明,要大家會用就好,至於背後的知識,等他們問了再說吧!

想想還是請大家花半小時Docker 基本概念。再表演一下如何使用別人已經設置好的支援GPU的 Tensorflow Docker image,這個 image 要好幾GB的下載,但是只要有一人下載過,就不用重複下載

docker run --runtime=nvidia -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3

然後請大家嘗試連到 http://10.1.1.100:8888 ,大家看到後頗驚豔,原來這麼簡單就可以有完整的Jupyter Notebook,不僅 Tensoflow, Jupyter 安裝好了,也可以在GPU環境下執行。

https://ithelp.ithome.com.tw/upload/images/20181026/20105283jIHri5VyoC.png

要結束 Jupyter Notebook 連續按 兩次 CTRL+C 即可。

他又再次執行已經被設置好的支援GPU的 Mxnet 的 image

docker run --runtime=nvidia -it mxnet/python:1.3.0_gpu_cu90_mkl_py3

這次是出現 Linux 文字控制台的畫面:

root@345b3c9a40af:/# 

他提醒大家看到『#』符號一般是以 root 權限下指令,要謹慎以免毀掉整個系統,他表演給大家可以嘗試在此Container 更新系統,安裝新的套裝等等

apt update #無須加 sudo,因為本身就是 root
apt upgrade
python3

這樣就進入 python 3 的交互界面 『>>>』,可以開始練習 Mxnet 的程式。按下 CTRL+D可離開 python 3。 然後可以安裝先前在 Conda 安裝的一些套件。

pip3 install -U pip
pip install jupyter notedown request pandas matplotlib gluonbook

Molly 問到:”那是否就不需要 conda,看來每個 Container 都是很獨立的系統,不會有版本的干擾?“ 。 Cash 覺得還是可以再加一層 Conda ,畢竟Conda套件管理有其用處。

緊接著 Cash 拋出一個較為完整的 Docker 啟動 (docker run) 指令來說明

docker run -t -i --runtime=nvidia \
   -p 8888:8888 -p 6006:6006 \  #Jupyter 與 Tensorboard 預設 port
   --name=mxnet \
   -v ~:/media \
   -v /etc/localtime:/etc/localtime:ro \
   -v /etc/timezone:/etc/timezone:ro \
   --workdir /media  \
   mxnet/python:1.3.0_gpu_cu92_py3 \
   bash

並開始解釋這些docker run參數用途:

-t -i #提供交互式虛擬 TTY,通俗講模擬文字終端機以控制Container
--runtime=nvidia #如要啟動的 Container 須用到 GPU 資源,則藉此宣告
-p #將Container 裡面用到的 port,對外暴露成哪個 port。 -p outPort:ContainerPort 
--name #為這個Container 取個易記的名子,後續操作用
-v #將主機上的目錄映射成Container 的一個新目錄,這樣Container 才能讀取已存在主機的檔案
-v /etc/localtime…  #連續兩行的目的是讓 Container 的時區與主機時區一致。
--workdir  #啟動 Container 後,立即進入此目錄
mxnet/python:1.… #Container 啟動所依賴的 Image,hub.docker.com 有許多可開箱即用的
bash  #啟動Container 後立即執行的程式

一旦啟動了 Container,可再用 termius 或是 puTTY 的終端機程式ssh 到 Server (ip 假設 ),下其他指令來操作 Container。常用的指令有:

docker images -a #查看主機已儲存哪些 image 可直接用
docker ps -a #主機還活著的 Container,有時需要關掉(刪除) Container 就需要先查
docker rm CONTAINER_NAME #關掉(刪除)Container,如須保存設定,必須下 docker commit…
docker rmi IMAGE_NAME #刪掉用不到的 image 釋放硬碟空間
docker stop CONTAINER_NAME #暫停 container
docker start -i CONTAINER_NAME #恢復被暫停的Container, 並進入TTY
docker exec -t -i CONTAINER_NAME bash #連結到已經啟動的 Container
docker commit CONTAINER_NAME NEW_IMAGE:TAG #將組態已經有變動的container 另製作新的 image

要下 docker rm 前,如果已經對Container有相當的設定安裝,或是存放資料,記得要下docker commit 創見新的 image 來保留先前Container的變動。下次啟動改成 docker run -t … NEW_IMAGE bash 即可。

備註:

專案緣起記錄在 【UP, Scrum 與 AI專案】


上一篇
Docker 與 Nvidia runtime 安裝
下一篇
山寨 GPU 顯示卡
系列文
深度學習所需入門知識--一位初學者的認知31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言